package code.whmmm.util.hikari.jdbcpool;

import code.whmmm.util.simple.ValueWrapper;
import code.whmmm.util.yaml.YamlReader;

/**
 * <p><b>
 * 只有使用 yaml 配置时可用！
 * </b></p>
 * <br/>
 * 创建时间: 2019/11/21 13:59
 *
 * @author Zero
 */
public class DbUtilFactory {

    /**
     * 使用 内置的 yml 读取器，创建对象。
     *
     * @param prefix 前缀 ,例如 datasource.db1 , datasource.db2
     * @return {@link SimpleDbUtil}
     */
    public static SimpleDbUtil createSimple(String prefix) {
        JdbcPoolConfig config = createConfig(prefix);
        return new SimpleDbUtil(config);
    }

    /**
     * 使用 内置的 yml 读取器，创建对象。
     *
     * @param prefix 前缀 ,例如 datasource.db1 , datasource.db2
     * @return {@link SimpleDbUtil}
     */
    public static TxDbUtil createTxUtil(String prefix) {
        JdbcPoolConfig config = createConfig(prefix);
        return new TxDbUtil(config);
    }

    private static JdbcPoolConfig createConfig(String prefix) {
        JdbcPoolConfig config = new JdbcPoolConfig();
        String key = prefix + ".";
        String pooName = YamlReader.get(key + "pool-name");
        int init = ValueWrapper.getInt(YamlReader.get(key + "init"));
        int min = ValueWrapper.getInt(YamlReader.get(key + "min"));
        int max = ValueWrapper.getInt(YamlReader.get(key + "max"));
        String url = YamlReader.get(key + "url");
        String username = YamlReader.get(key + "username");
        String password = YamlReader.get(key + "password");
        String dbname = YamlReader.get(key + "name");


        config.setPoolName(pooName);
        config.setInit(init);
        config.setMin(min);
        config.setMax(max);
        config.setUrl(url);
        config.setUsername(username);
        config.setPassword(password);
        config.setName(dbname);

        return config;
    }


}
